hhkb
컴퓨터과학

어셈블리_14_다단계 인증 로직의 분석과 파해 케이스 스터디

작성자 : Heehyeon Yoo|2025-10-30
# Assembly# Case Study# CrackMe# Analysis

지금까지 학습한 GDB, Ghidra, 레지스터 조작, 알고리즘 분석 기법을 종합하여 실제 CrackMe 예제(auth_final)를 분석한다.

1. 시나리오 및 보호 기법

대상 프로그램은 3단계의 보호 기법을 가지고 있다. 올바른 IDSerial Key를 찾아 인증을 통과해야 한다.

  1. Stage 1: 안티 디버깅 (ptrace 탐지)
  2. Stage 2: ID 검증 (문자열 비교)
  3. Stage 3: Serial Key 검증 (XOR 알고리즘)

2. 단계별 분석

Stage 1: 안티 디버깅 우회

GDB로 실행 시 "Debugger Detected!" 메시지와 함께 종료된다. ptrace 탐지 기법이 적용된 것으로 판단된다.
catch syscall ptrace를 설정하고, ptrace 호출 직후 리턴값(RAX)을 0으로 조작하여 우회한다. "Enter ID:" 프롬프트가 출력되며 다음 단계로 진입한다.

Stage 2: ID 추출(정적 분석)

Ghidra를 통해 "Enter ID:" 문자열을 참조하는 코드를 분석한다. strcmp 함수를 통해 입력값과 특정 문자열을 비교하는 로직이 확인된다.

if (strcmp(input_id, "admin") == 0) {
    go_stage3();
}

비교 문자열이 평문으로 노출되어 있다. 첫 번째 정답 ID는 **admin**이다.

Stage 3: Serial Key 역산(알고리즘 분석)

ID 입력 후 "Enter Serial:"을 요구한다. 검증 로직을 디컴파일하면 다음과 같다.

// 디컴파일 코드
for (int i = 0; i < 5; i++) {
    if (input_serial[i] != (id[i] ^ 0x0F)) {
        fail();
    }
}

단순 비교가 아닌, ID 문자열(admin)의 각 문자를 키(0x0F)와 XOR 연산한 결과와 비교한다. 파이썬 스크립트로 정답을 역산한다.

id_str = "admin"
serial = ""
for char in id_str:
    serial += chr(ord(char) ^ 0x0F)
print(serial)
# 결과: nkbfa

두 번째 정답 Serial은 **nkbfa**다.

3. 최종 결과

  • ID: admin
  • Serial: nkbfa

위 값을 입력하여 "Access Granted!" 메시지를 확인했다. 이를 통해 동적 분석과 정적 분석, 그리고 스크립팅을 통한 자동화가 유기적으로 연결되어야 함을 확인했다.